% GRAMATICA
s(s(SN, SV)) --> s(nogap, Num, Gen).
s(s(SN, SV, Gap, Num, Gen))  --> sn(SN, nogap, Num, Gen) , sv(SV, Gap, Num).

sn(sn(ART, SUBST, OPT_REL, nogap, Num, Gen), nogap, Num, Gen) --> art(ART, Num, Gen), subst(SUBST, Num, Gen), opt_rel(OPT_REL).
sn(gap(sn), _, _) --> [].



opt_rel(opt_rel) --> [].
opt_rel(opt_rel(OPT_REL, SV)) --> pron_rel(OPT_REL), sv(SV, nogap, _).
opt_rel(opt_rel(OPT_REL, SV))  --> pron_rel(OPT_REL), s(gap(sn), Num, _).

sv(sv(VERBO, SN, Gap, Num), Gap, Num) --> tverb(VERBO, Num), sn(SN, Gap, _, Gen).
sv(sv(VERBO, nogap, Num), nogap, Num) --> iverb(VERBO, Num).


% DICIONARIO
pron_rel(pron_rel(que)) --> [que].

art(art(a),singular, fem) --> [a].
art(art(o), singular, masc) --> [o].
art(art(os), plural, masc) -->[os].

subst(subst(menino), singular, masc) --> [menino].
subst(subst(meninos), plural, masc) --> [meninos].
subst(subst(menina), singular, fem) --> [menina].
subst(subst(cachorros), plural, masc) --> [cachorros].
subst(subst(cachorro), singular, masc) --> [cachorro].

tverb(tverb(beijou), singular) --> [beijou].
tverb(tverb(viu), singular) --> [viu].
tverb(tverb(viram), plural) --> [viram].

iverb(iverb(viu), singular) --> [viu].
iverb(iverb(viram), plural) --> [viram].
iverb(iverb(caiu), singular) --> [caiu].
iverb(iverb(cairam), plural) --> [cairam].
iverb(iverb(correu), singular) --> [correu].
iverb(iverb(correram), plural) --> [correram].
